Case<выражение> of
<десятичное_число> => Md (<десятичное_число>, s)
<переменная> => if VARMAP (<переменная>, s) = undef
then error
else VARMAP (<переменная>, s)
<двоичное_выражение> =>
if (Me (<двоичное_выражение>.<выражение_слева>, s) = undef
OR Me (<двоичное_выражение>.< выражение_справа >, s) = undef)
then error
else if (<двоичное_выражение>.< оператор > = '+' then
Me (<двоичное_выражение>.<выражение_слева>, s) +
Me (<двоичное_выражение>.<выражение_справа>, s)
else Me (<двоичное_выражение>.<выражение_слева>, s) ×
Me (<двоичное_выражение>.<выражение_справа>, s).
Оператор присваивания - это вычисление выражения плюс присваивание его значения переменной, находящейся в левой части. Сказанное можно описать следующей функцией:
Ма (х = Е, s) º if Me (E, s) = error
then error
else s' = {< i1', v1' >, < i2', v2' >,..., < in', vn' >} where
for j = 1, 2,..., n, vj' = VARMAP (ij', s) if ij <> x;
Me (E, s) if ij = x.
Отметим, что два сравнения, выполняющиеся в двух последних строках(ij <> x и ij = х), относятся к именам, а не значениям.
После определения полной системы для заданного языка ее можно использовать для определения смысла полных программ этого языка. Это создает основу для очень строгого способа мышления в программировании.
Денотационная семантика может использоваться для разработки языка. Операторы, описать которые с помощью денотационной семантики трудно, могут оказаться сложными и для понимания пользователями языка, и тогда разработчику следует подумать об альтернативной конструкции.
|
|
С одной стороны, денотационные описания очень сложны, с другой - они дают великолепный метод краткого описания языка.
Дата добавления: 2015-12-20; просмотров: 7; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!